package com.allen.study.application.api.assembler.mapper;

import com.allen.study.application.api.request.SysRoleCreateRequest;
import com.allen.study.application.api.request.SysRoleQueryRequest;
import com.allen.study.application.api.request.SysRoleUpdateRequest;
import com.allen.study.application.api.response.SysRoleQueryResponse;
import com.allen.study.application.api.response.SysRoleResponse;
import com.allen.study.domain.entity.SysRole;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 角色表数据传输对象结构映射
 *
 * @author AllenSun
 * @since 2025-04-23 20:46
 */
@Mapper
public interface ISysRoleDTOStructMapper {

    /**
     * 角色表数据传输对象结构映射实例
     */
    ISysRoleDTOStructMapper INSTANCE = Mappers.getMapper(ISysRoleDTOStructMapper.class);

    /**
     * 角色表创建请求数据传输对象 转 角色表实体
     *
     * @param createRequest 角色表创建请求数据传输对象
     * @return 角色表实体
     */
    SysRole fromCreateRequest(SysRoleCreateRequest createRequest);

    /**
     * 角色表更新请求数据传输对象 转 角色表实体
     *
     * @param updateRequest 角色表更新请求数据传输对象
     * @return 角色表实体
     */
    SysRole fromUpdateRequest(SysRoleUpdateRequest updateRequest);

    /**
     * 角色表查询请求数据传输对象 转 角色表实体
     *
     * @param queryRequest 角色表查询请求数据传输对象
     * @return 角色表实体
     */
    SysRole fromQueryRequest(SysRoleQueryRequest queryRequest);

    /**
     * 角色表实体 转 角色表响应数据传输对象
     *
     * @param sysRole 角色表实体
     * @return 角色表响应数据传输对象
     */
    SysRoleResponse toResponse(SysRole sysRole);

    /**
     * 角色表实体 转 角色表查询响应数据传输对象
     *
     * @param sysRole 角色表实体
     * @return 角色表查询响应数据传输对象
     */
    SysRoleQueryResponse toQueryResponse(SysRole sysRole);

    /**
     * 角色表实体列表 转 角色表查询响应数据传输对象列表
     *
     * @param sysRoleList 角色表实体列表
     * @return 角色表查询响应数据传输对象列表
     */
    List<SysRoleQueryResponse> toQueryResponse(List<SysRole> sysRoleList);
}
